package com.binhthuan.catechist.client.form;

import java.util.Date;

import com.binhthuan.catechist.client.ECApplication;
import com.binhthuan.catechist.client.data.YearDS;
import com.binhthuan.catechist.shared.Utilities;
import com.binhthuan.catechist.shared.constant.Parameter;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.DateItem;
import com.smartgwt.client.widgets.form.fields.HiddenItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.validator.DateRangeValidator;

public class YearForm extends AbstractForm {

    private DateRangeValidator validator;

    public YearForm(YearDS dataSource) {
        super(dataSource);
        setMargin(10);
        setNumCols(4);
        setCellPadding(5);

        validator = new DateRangeValidator();
        validator.setErrorMessage("conflicted date");

        HiddenItem idField = new HiddenItem(Parameter.ID);

        DateItem startDateField = new DateItem(Parameter.START_DATE);
        startDateField.setTitle(ECApplication.getConstants().startDate());
        startDateField.setRequired(true);

        DateItem endDateField = new DateItem(Parameter.END_DATE);
        endDateField.setTitle(ECApplication.getConstants().endDate());
        endDateField.setRequired(true);
        endDateField.setValidators(validator);

        TextItem descriptionField = new TextItem(Parameter.DESCRIPTION);
        descriptionField.setRequired(true);
        descriptionField.setTitle(ECApplication.getConstants().description());
        descriptionField.setWidth(250);
        descriptionField.setColSpan(4);
        descriptionField.setWrapTitle(false);

        ButtonItem saveButton = createSaveButton();
        saveButton.setColSpan(4);

        setFields(idField, startDateField, endDateField, descriptionField, saveButton);
    }

    @Override
    public void saveClick() {
        if (getStartDate().compareTo(getEndDate()) >= 0) {
            validator.setMin(getStartDate());
            validator.setMax(new Date(getStartDate().getTime() - 1));
        } else {
            validator.setMin(getStartDate());
            validator.setMax(getEndDate());
        }
        
        if(Utilities.isNullOrEmpty(getDescription())) {
            getItem(Parameter.DESCRIPTION).setValue("");
        }
        super.saveClick();
    }

    /**
     * Lấy mô tả cho năm học.
     * @return Mô tả cho năm học.
     */
    public String getDescription() {
       return (String) ((TextItem) getItem(Parameter.DESCRIPTION)).getValue();
    }
    /**
     * Lấy ngày bắt đầu năm học.
     * 
     * @return Ngày bắt đầu năm học.
     */
    public Date getStartDate() {
        DateItem item = (DateItem) getItem(Parameter.START_DATE);
        return (Date) item.getValue();
    }

    /**
     * Lấy ngày kết thúc năm học.
     * 
     * @return Ngày kết thúc năm học.
     */
    public Date getEndDate() {
        DateItem item = (DateItem) getItem(Parameter.END_DATE);
        return (Date) item.getValue();
    }
}
